package cn.tedu.springmvc2.response;

import lombok.Data;

/**
 * 用来封装响应信息的结果集类
 */
@Data
public class JsonResult {
//    code: 这是一个整数类型的字段，通常用于表示HTTP状态码或者自定义的业务状态码。它用于指示请求的成功或失败，以及具体的错误类型。
//    msg: 这是一个字符串类型的字段，用于存储与状态码相关联的描述信息。通常用于向客户端提供更详细的错误信息或成功信息。
//    data: 这是一个对象类型的字段，用于存储实际要返回的数据。它可以是任何对象类型，因此能够灵活地适应不同的业务需求。
    private Integer code;
    private String msg;
    private Object data;
//    这个构造方法接受一个状态码和一个消息作为参数，用于创建一个不包含数据的简单响应。
    public JsonResult(Integer code, String msg){
        this.code = code;
        this.msg = msg;
    }
//    这个构造方法接受一个 StatusCode 对象和一个数据对象作为参数。
//    StatusCode 是一个自定义的枚举或类，用于封装状态码和对应的消息。
//    这个构造方法用于创建一个包含状态码、消息和数据的响应。
    public JsonResult(StatusCode statusCode, Object data){
        this.code = statusCode.getCode();
        this.msg = statusCode.getMsg();
        this.data = data;
    }
//    这个构造方法接受一个 StatusCode 对象作为参数，用于创建一个不包含数据的响应。
//    类似于构造方法1，但使用 StatusCode 对象来提供状态码和消息。
    public JsonResult(StatusCode statusCode){
        this.code = statusCode.getCode();
        this.msg = statusCode.getMsg();
    }
    /**
     *   SUCCESS状态下,直接内置好要返回的成功的码和消息
     *   1. 会返回 成功的码和消息
     *   2. 会返回 成功的码和消息  还有 结果
     */

//    这个构造方法用于创建一个成功的响应，并包含要返回的数据。
//    它将状态码和消息设置为 StatusCode.SUCCESS 的值，表示请求成功。
//    由于是私有的，外部类不能直接调用它，需要通过静态工厂方法来创建实例。
    private JsonResult(Object data){
        this.code = StatusCode.SUCCESS.getCode();//成功的码
        this.msg = StatusCode.SUCCESS.getMsg();//成功的消息
        this.data = data;
    }
//    这是一个静态工厂方法，用于创建包含数据的成功响应。
//    开发者可以通过调用 JsonResult.ok(data) 来创建一个成功的响应对象，而不需要关心具体的构造方法。
    public  static JsonResult ok(Object data){//静态有参方法
        return  new JsonResult(data);
    }
//    这个无参构造方法用于创建一个不包含数据的成功响应。
//    同样，由于是私有的，外部类不能直接调用它，需要通过静态工厂方法来创建实例。
    private JsonResult(){//无参构造方法
        this.code = StatusCode.SUCCESS.getCode();//成功的码
        this.msg = StatusCode.SUCCESS.getMsg();//成功的消息
    }
//    这是一个静态工厂方法，用于创建一个不包含数据的成功响应。
//    开发者可以通过调用 JsonResult.ok() 来创建一个简单的成功响应对象。
    public  static JsonResult ok(){//静态无参方法
        return  new JsonResult();
    }

}
